  (function(){    // 工具类
    "use strict";
    const Aurl = 'http://api.adline.com.cn/api/';
    let A1 = null;
    let util = {
        get (url,data, successCallback, errorCallback) {  // GET 请求
            $.ajax({
                type: 'GET',
                url: Aurl + url,
                data:data,
                success: successCallback,
                error:errorCallback
            })
        },
        formDate(uData){ // 时间
              let myDate = new Date(uData);
              let year = myDate.getFullYear();
              let month = myDate.getMonth() + 1;
              let day = myDate.getDate();
              return year + '-' + month + '-' + day;
        },
        uuid (len, radix) { // uuid
            let chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
            let uuid = [], i;
            radix = radix || chars.length;
            if (len) {
              // Compact form
              for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random()*radix];
            } else {
              // rfc4122, version 4 form
              let r;
              // rfc4122 requires these characters
              uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
              uuid[14] = '4';
         
              // Fill in random data.  At i==19 set the high bits of clock sequence as
              // per rfc4122, sec. 4.1.5
              for (i = 0; i < 36; i++) {
                if (!uuid[i]) {
                  r = 0 | Math.random()*16;
                  uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
                }
              }
            }
            return uuid.join('');
        },
        crop(src,type,w,h) { // 图片裁剪
            let imgSrc;
            // uc类型图片裁剪
            if(type==1){
                imgSrc=src+"&width="+w+"&height="+h;
            }else if(type==2){
            //默认类型
                imgSrc=src.replace(/(\.\w{3,4})$/i,"_crop"+w+"x"+h+"$1")
            }
            return imgSrc;
        },
        cookie(name, value, options){  // { "user", "baidu", { expires: 10, // 有效期为 10 天 path: "/", // 整个站点有效 domain: "www.baidu2.com", // 有效域名 secure: true // 加密数据传输}
            // 如果第二个参数存在
            if (typeof value != 'undefined') {
                options = options || {};
                if (value === null) {
                    // 设置失效时间
                    options.expires = -1;
                }
                let expires = '';
                // 如果存在事件参数项，并且类型为 number，或者具体的时间，那么分别设置事件
                if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
                    let date;
                    if (typeof options.expires == 'number') {
                        date = new Date();
                        date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
                    } else {
                        date = options.expires;
                    }
                    expires = '; expires=' + date.toUTCString();
                }
                let path = options.path ? '; path=' + options.path : '', // 设置路径
                    domain = options.domain ? '; domain=' + options.domain : '', // 设置域 
                    secure = options.secure ? '; secure' : ''; // 设置安全措施，为 true 则直接设置，否则为空

                // 把所有字符串信息都存入数组，然后调用 join() 方法转换为字符串，并写入 Cookie 信息
                document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join(''); 
            } else { // 如果第二个参数不存在
                let CookieValue = null;
                if (document.cookie && document.cookie != '') {
                    let Cookies = document.cookie.split(';');
                    for (let i = 0; i < Cookies.length; i++) {
                        let Cookie = (Cookies[i] || "").replace( /^\s+|\s+$/g, "");
                        if (Cookie.substring(0, name.length + 1) == (name + '=')) {
                            CookieValue = decodeURIComponent(Cookie.substring(name.length + 1));
                            break;
                        }
                    }
                }
                return CookieValue;
            }
        },
        generalize(data){  // 推广
            for(let i=0;i<data.length;i++){
                //baidu
                if(data[i].style_type==101){
                    BAIDU_CLB_fillSlotAsync(data[i].ad_id,data[i].uni_token); 
                }else if(data[i].style_type==102){
                     //获取参数
                    let cctv=$("#"+data[i].uni_token);
                    if(data[i].height && data[i].width ){
                        let proportion = data[i].width/data[i].height;
                        height=cctv.width()/proportion+"px";
                    }else if(data[i].height){
                        height=data[i].height+"px";
                    }
                     let iframe=cctv.find('iframe').height(height).get(0);
                     iframe.contentDocument && (iframe.contentDocument.write('<html><head></head><body  scrolling="no" frameborder="0" align="center,center"  marginheight="0" allowtransparency="true" marginwidth="0" width="100%"">'+data[i].html+'</body></html>'),iframe.contentDocument.close()); 
                }
            }
        },
        toast (text) {   // 弹出框
            clearTimeout(A1);
            $(".downloadTip").addClass('show').html(text);
            A1 = setTimeout(function () {
                $(".downloadTip").removeClass('show');
            },1500);
        }
    }
    window.G = util;
})();

(function(){  // 初始化函数
    "use strict";
    let init = {
        nav_bar(data) {  // nav
            let list = '';
            for (let i =0;i < data.length; i++){
            list +=`<li>
                        <a href="${data[i].link_url}">
                            <div class="nav-icon" style="background-image:url(${data[i].icon_url})"> 
                            </div>
                            <span>${data[i].title}</span>
                        </a>
                    </li>`
            }
            $('.nav-lists').html(list);
        },
        channels (data) {  // 新闻频道
            let list = '';
            for (let i =0;i < data.length; i++){
                if( i === 0 ) {
                    list = `<li class="active" data-index="${i}" data-cid="${data[i].cid}" data-createtime="0" data-articleid="0"  data-pagetoken="0">${data[i].title}</li>`
                }else {
                    list +=`<li  data-index="${i}" data-cid="${data[i].cid}">${data[i].title}</li>`
                }
            }
            $('#navContent').html(list);
        },
        search (searchUrl) { // 调用搜索
            let url = searchUrl.replace('#KEYWORD#','');
            $("form").submit(function(event){
               event.preventDefault();
               window.location.href = url + $("#index-kw").val();
            });
            G.get(`v2/hotword`, null, (res) => {
                if (res.status === 0) {
                    $("form input").val(res.data[Math.floor( Math.random()*7 +1)].title)
                }
            })
        }
    }
    window.init = init;
})();

G.get(`v3/flexibleConfig`, { app_id: '10064758', c: 1 }, (res) => {
    // 定义模板方法
    template.defaults.imports.formatDate = (time) => {
        return G.formDate(time)
    }
    template.defaults.imports.crop = (src,type,w,h) => {
        return G.crop(src,type,w,h)
    }
    // 存入cookie模拟用户信息
    if(!G.cookie('adline_newsdn')){
        G.cookie('adline_newsdn',G.uuid(8, 16),{ expires: 30});
    } 
    if (res.status === 0) {
        init.nav_bar(res.data.app_config.nav_bar); // 网址导航
        init.channels(res.data.app_config.channels); // 新闻频道
        init.search(res.data.app_config.search_bar.search_url) // 调用搜索
        upscroll()
        $('.g-scrollview').removeClass('hidden');
        $('.native-loading-wrap').fadeOut('fast');
    } else {
        G.toast(`网络错误`);
    }
})
 function upscroll () {
            // 下拉内容展示区
            let htmlContent = `<img class="downwarp-slogan" src="../img/mescroll-slogan.png"/>
                     <p class="downwarp-progress"></p>
                     <p class="downwarp-loading mescroll-rotate"></p>
                     <p class="downwarp-mascot"></p>`
            //无数据的布局
            let htmlNodata = `<img class="upwarp-nodata" src="../img/mescroll-nodata.png"/>`;         
            //创建MeScroll对象,内部已默认开启下拉刷新,自动执行up.callback,刷新列表数据;
            let mescroll = new MeScroll("mescroll", {
                up: {
                    callback (page, mescroll) { //上拉回调,此处可简写; 相当于 callback: function (page, mescroll) { getListData(page); }
                        getListData(page, mescroll, 'up');
                    },
                    page:{size:1},//每次加载1条数据,模拟loadFull
                    loadFull: {
                        use: true, //列表数据过少,是否自动加载下一页,直到满屏或者无更多数据为止;默认false
                        delay: 500 //延时执行的毫秒数; 延时是为了保证列表数据或占位的图片都已初始化完成,且下拉刷新上拉加载中区域动画已执行完毕;
                    },
                    htmlNodata: htmlNodata, //无数据的布局
                    toTop:{ //配置回到顶部按钮
                        src : "../img/mescroll-totop.png", //默认滚动到1000px显示,可配置offset修改
                        offset : 800
                    },
                    empty: {
                        icon: "../img/mescroll-empty.png", //空布局的图标
                        tip: "亲,暂无新内容~去其他频道逛逛吧!"
                    },
                    isBounce: false, //此处禁止ios回弹,解析(务必认真阅读,特别是最后一点): http://www.mescroll.com/qa.html#q10
                    clearEmptyId: "dataList", //相当于同时设置了clearId和empty.warpId; 简化写法;
                    warpId: "upscrollWarp" //让上拉进度装到upscrollWarp里面
                },
                down:{
                    offset: 65, //触发刷新的距离
                    htmlContent: htmlContent, //布局内容
                    inited (mescroll, downwarp) {
                        //初始化完毕的回调,可缓存dom
                        mescroll.downProgressDom = downwarp.getElementsByClassName("downwarp-progress")[0];
                        mescroll.downLoadingDom = downwarp.getElementsByClassName("downwarp-loading")[0];
                    },
                    inOffset (mescroll) {
                        //进入指定距离范围内那一刻的回调
                        mescroll.downLoadingDom.style.display="none";
                        mescroll.downProgressDom.style.display="inline-block";
                        mescroll.downProgressDom.style.webkitTransform = "rotate(0deg)";
                        mescroll.downProgressDom.style.transform = "rotate(0deg)";
                    },
                    outOffset (mescroll) {
                        //下拉超过指定距离那一刻的回调
                        mescroll.downProgressDom.style.webkitTransform = "rotate(180deg)";
                        mescroll.downProgressDom.style.transform = "rotate(180deg)";
                    },
                    onMoving (mescroll, rate, downHight) {
                        //下拉过程中的回调,滑动过程一直在执行; rate下拉区域当前高度与指定距离的比值(inOffset: rate<1; outOffset: rate>=1); downHight当前下拉区域的高度
                        //配置空方法,表示移动过程不做处理 (不可写onMoving:null,否则会执行mescroll默认配置的onMoving方法)
                    },
                    showLoading (mescroll) {
                        //触发下拉刷新的回调
                        mescroll.downProgressDom.style.display="none";
                        mescroll.downLoadingDom.style.display="inline-block";
                    },
                    auto:false,//是否在初始化完毕之后自动执行下拉回调callback; 默认true
                    isBoth: true,
                    callback (mescroll) { //下拉刷新的回调
                        getListData(null, mescroll, 'down');
                    } 
                },
            });
            let navWarp=document.getElementById("navWarp");
            if(mescroll.os.ios){
                //ios的悬停效果,通过给navWarp添加nav-sticky样式来实现
                navWarp.classList.add("nav-sticky");
            }else{
                //android和pc端悬停效果,通过监听mescroll的scroll事件,控制navContent是否为fixed定位来实现
                navWarp.style.height=navWarp.offsetHeight+"px";//固定高度占位,避免悬浮时列表抖动
                let navContent=document.getElementById("navContent");
                mescroll.optUp.onScroll=function(mescroll, y, isUp){
                    if(y>=navWarp.offsetTop){
                        navContent.classList.add("nav-fixed");
                    }else{
                        navContent.classList.remove("nav-fixed");
                    }
                }
            }
            /*初始化菜单*/
            let index = 0;
            $(".nav li").click(function(){
                let i = $(this).index();
                if ( index!= i ) {
                    index = i;
                    $('.nav li').eq(index).addClass("active").siblings().removeClass("active");
                    let minHight = mescroll.getClientHeight() - navWarp.offsetHeight;
                    document.getElementById("upscrollWarp").style.minHeight = minHight+"px";
                    mescroll.resetUpScroll();
                }
            })
            let getListData = (page, mescroll, type) => {
                let li = $('.nav li').eq(index);
                let sendData = { // 传参
                    app_id:10064758,
                    adline_newsdn: G.cookie('adline_newsdn'),
                    cid: li.attr("data-cid"),    
                    page_token: type === 'down' ? 0 : li.attr("data-pagetoken"),
                    article_id: type === 'down' ? 0 : li.attr("data-articleid"),
                    create_time: type === 'down' ? 0 : li.attr("data-createtime"),
                    c:0
                }
                G.get(`v2/article?`,sendData,(res) => {
                    if ( res.data.articles ) {
                        mescroll.endSuccess(res.data.articles.length);
                        type === 'down' && res.data.articles.length ===0 ? G.toast(`暂无新内容，去其他频道看看吧！`) : null;
                        if( res.data.articles.length>0) {
                            // res.data.articles.map((v) => {
                            //     return v.url = `http://m.adline.com.cn` + v.url;
                            // })
                            type === 'down' ? G.toast(`已更新${res.data.articles.length}条新闻`) : null;
                            type === 'down' ? $('.data-list').html(template('card',res.data)) : $('.data-list').append(template('card',res.data));
                            $("img.lazy").lazyload({threshold : 400, container: $(".mescroll")});
                            G.generalize(res.data.articles);
                        }
                    } else {
                        mescroll.endErr(); //联网失败的回调,隐藏下拉刷新和上拉加载的状态;
                    }   
                },(res) => {
                    mescroll.endErr();
                })
            }
            
}